Elasticsearch Query DSL এর ধারণা

Elasticsearch Query DSL এর ধারণা

Elasticsearch Query DSL (Domain Specific Language) হলো Elasticsearch-এ ডেটা সার্চ এবং ফিল্টার করার জন্য একটি JSON ভিত্তিক ল্যাঙ্গুয়েজ। এটি একটি শক্তিশালী এবং নমনীয় টুল যা ব্যবহারকারীদের ডকুমেন্টের মধ্যে নির্দিষ্ট শর্ত, কিওয়ার্ড, এবং ফিল্টার ব্যবহার করে সার্চ অপারেশন চালাতে সহায়ক। Query DSL ব্যবহার করে বিভিন্ন ধরনের সার্চ এবং ফিল্টার তৈরি করা যায়, যেমন টার্ম সার্চ, ফুল-টেক্সট সার্চ, রেঞ্জ ফিল্টার, বুলিয়ান অপারেশন, এবং আরও অনেক কিছু। নিচে Elasticsearch Query DSL-এর বিস্তারিত ধারণা এবং এর উপাদানগুলো নিয়ে আলোচনা করা হলো।

Query DSL এর মূল উপাদানসমূহ

Elasticsearch Query DSL মূলত দুটি প্রধান অংশে বিভক্ত: Leaf Query Clauses এবং Compound Query Clauses। এগুলো একত্রে ব্যবহার করে আরও জটিল এবং উন্নত সার্চ অপারেশন তৈরি করা যায়।

১. Leaf Query Clauses

  • Leaf Queries হলো সুনির্দিষ্ট কন্ডিশন বা শর্ত, যা একটি ডকুমেন্টের নির্দিষ্ট ফিল্ড বা মানের ভিত্তিতে মিল খুঁজে বের করে। Leaf Query সাধারণত একটি ফিল্ড এবং এর মানের উপর ভিত্তি করে কাজ করে।
  • উদাহরণ:
    • match: একটি ফিল্ডে নির্দিষ্ট টার্ম বা টেক্সটের সাথে মিল খুঁজে বের করে।
    • term: নির্দিষ্ট ফিল্ডের নির্দিষ্ট মান খুঁজে বের করে (exact match)।
    • range: একটি ফিল্ডে রেঞ্জ ভিত্তিক কন্ডিশন প্রয়োগ করে (যেমন সংখ্যা বা তারিখের রেঞ্জ)।

উদাহরণ:

{
  "query": {
    "term": {
      "occupation": "engineer"
    }
  }
}
  • এখানে "term" কন্ডিশনটি "occupation" ফিল্ডে "engineer" মান খুঁজে বের করছে।

২. Compound Query Clauses

  • Compound Queries একাধিক Leaf Query বা অন্যান্য Compound Query-কে একত্রে সংযুক্ত করতে ব্যবহার করা হয়। এটি আরও জটিল এবং শক্তিশালী কন্ডিশন তৈরি করতে সহায়ক।
  • উদাহরণ:
    • bool: একাধিক কন্ডিশন (must, should, must_not, filter) একত্রে সংযুক্ত করে।
    • dis_max: একাধিক query-র সর্বোচ্চ স্কোরিং রেজাল্ট প্রদান করে।
    • constant_score: নির্দিষ্ট স্কোরের ভিত্তিতে রেজাল্ট ফিল্টার করে।

উদাহরণ:

{
  "query": {
    "bool": {
      "must": [
        { "match": { "occupation": "software engineer" } }
      ],
      "filter": [
        { "range": { "age": { "gte": 25, "lte": 35 } } }
      ]
    }
  }
}
  • এখানে "bool" কন্ডিশন ব্যবহার করে "must" ক্লজে "occupation" ফিল্ডে "software engineer" টার্ম খোঁজা হচ্ছে এবং "filter" ক্লজে "age" ফিল্ডে বয়সের রেঞ্জ (২৫ থেকে ৩৫) ফিল্টার করা হচ্ছে।

Query DSL এর সাধারণ ধরনের সার্চ অপারেশন

১. Match Query (ফুল-টেক্সট সার্চ)

  • match কন্ডিশন ব্যবহার করে একটি ফিল্ডে নির্দিষ্ট টার্ম বা টেক্সটের সাথে মিল খুঁজে বের করা হয়। এটি সাধারণত ফ্রি-টেক্সট সার্চের জন্য ব্যবহৃত হয়।
{
  "query": {
    "match": {
      "description": "open source software"
    }
  }
}
  • এখানে "description" ফিল্ডে "open source software" টার্মটি খোঁজা হচ্ছে।

২. Term Query (Exact Match)

term কন্ডিশন নির্দিষ্ট ফিল্ডের সুনির্দিষ্ট মান খুঁজে বের করতে ব্যবহৃত হয়। এটি সাধারণত স্ট্রাকচারড ডেটার জন্য প্রযোজ্য, যেমন সংখ্যা, তারিখ, বা কিওয়ার্ড।

{  "query": {    "term": {      "status": "active"    }  } }

  • এখানে "status" ফিল্ডে "active" মান খোঁজা হচ্ছে।

৩. Range Query (রেঞ্জ ভিত্তিক কন্ডিশন)

  • range কন্ডিশন ব্যবহার করে সংখ্যামূলক বা তারিখের রেঞ্জ ভিত্তিক কন্ডিশন প্রয়োগ করা যায়।
{
  "query": {
    "range": {
      "salary": {
        "gte": 50000,
        "lte": 100000
      }
    }
  }
}
  • এখানে "salary" ফিল্ডে ৫০,০০০ থেকে ১,০০,০০০ এর মধ্যে থাকা ডকুমেন্টগুলো ফিল্টার করা হচ্ছে।

৪. Bool Query (Multiple Conditions)

  • bool কন্ডিশন ব্যবহার করে একাধিক query-র সংমিশ্রণ তৈরি করা যায়। এটি চারটি প্রধান ক্লজ ব্যবহার করে:
    • must: সব কন্ডিশন মিলে যাওয়া আবশ্যক।
    • should: কন্ডিশনগুলো মিলে গেলে রেজাল্ট স্কোর বাড়বে।
    • must_not: কন্ডিশনগুলো মিলে গেলে রেজাল্ট থেকে বাদ দেওয়া হবে।
    • filter: নির্দিষ্ট কন্ডিশন পূরণ করতে হবে, তবে এটি স্কোর প্রভাবিত করে না।
{
  "query": {
    "bool": {
      "must": [
        { "match": { "occupation": "developer" } }
      ],
      "should": [
        { "match": { "skills": "Java" } },
        { "match": { "skills": "Python" } }
      ],
      "must_not": [
        { "term": { "status": "inactive" } }
      ]
    }
  }
}
  • এখানে "must" ক্লজে "occupation" ফিল্ডে "developer" থাকতে হবে, "should" ক্লজে "skills" ফিল্ডে "Java" বা "Python" টার্ম থাকতে পারবে, এবং "must_not" ক্লজে "status" ফিল্ডে "inactive" না থাকতে হবে।

৫. Wildcard Query (প্যাটার্ন সার্চ)

  • wildcard কন্ডিশন ব্যবহার করে একটি ফিল্ডে প্যাটার্ন ভিত্তিক সার্চ করা যায়, যেখানে * এবং ? প্যাটার্ন ব্যবহার করা হয়।
{
  "query": {
    "wildcard": {
      "username": "jo*"
    }
  }
}
  • এখানে "username" ফিল্ডে "jo" দিয়ে শুরু হওয়া সমস্ত মান খোঁজা হচ্ছে।

৬. Fuzzy Query (অপরিচিত টার্মের জন্য সার্চ)

  • fuzzy কন্ডিশন ব্যবহার করে কাছাকাছি টার্ম বা স্পেলিং মিস্টেক সহ টার্ম খোঁজা যায়।
{
  "query": {
    "fuzzy": {
      "name": "jon"
    }
  }
}
  • এটি "name" ফিল্ডে "jon", "john", অথবা এর কাছাকাছি মিল খুঁজে বের করবে।

Query DSL এর সুবিধা

  1. নমনীয়তা: Query DSL ব্যবহার করে খুব সহজেই বিভিন্ন ধরনের কন্ডিশন তৈরি করা যায়, যেমন এক্সাক্ট ম্যাচ, রেঞ্জ, বা ফ্রি-টেক্সট সার্চ।
  2. ব্লেন্ডেড কন্ডিশন: Compound Query ব্যবহার করে একাধিক কন্ডিশন একসঙ্গে সংযুক্ত করা এবং আরও জটিল সার্চ অপারেশন তৈরি করা যায়।
  3. JSON ভিত্তিক কাঠামো: JSON ফরম্যাটে কন্ডিশন তৈরি করার ফলে এটি REST API এর মাধ্যমে সহজেই ব্যবহার করা যায় এবং রেসপন্সও JSON ফরম্যাটে পাওয়া যায়।

উপসংহার

Elasticsearch Query DSL একটি শক্তিশালী এবং নমনীয় সার্চ ল্যাঙ্গুয়েজ, যা ব্যবহারকারীদের সুনির্দিষ্ট কন্ডিশন এবং কিওয়ার্ড ব্যবহার করে সার্চ অপারেশন চালাতে সহায়ক। Leaf Query এবং Compound Query-এর মাধ্যমে বিভিন্ন ধরনের এবং উন্নত সার্চ অপারেশন তৈরি করা যায়। Query DSL-এর সাহায্যে Elasticsearch-এ দ্রুত এবং কার্যকরীভাবে ডেটা সার্চ এবং ফিল্টার করা সম্ভব।

Content added By

আরও দেখুন...

Promotion